package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.service.FileUploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author lfy
 * @Description
 * @create 2023-07-12 10:37
 */
@Slf4j
@RequestMapping("/admin/product")
@RestController
public class FileuploadRestController {


    @Autowired
    FileUploadService fileUploadService;
    /**
     * 如何获取到前端提交的文件流
     * 文件上传请求：多部件请求； multipart请求
     * @RequestPart： 接文件项
     *
     * 怎么接这个数据？
     * <form action="aaa" method="post" enctype="multipart/form-data">
     *     头像：<input name="file" type="file"/> <br/>
     *     身份证：<input name="sfz" type="file" multiple/> <br/>
     *     姓名：<input name="username" type="text"/> <br/>
     *     年龄：<input name="age" type="number"/> <br/>
     * </form>
     *
     * 发请求：
     *   请求首行： 请求方式（GET、POST） 请求URL?p1=v1&p2=v2 （GET请求把参数带到路径上）
     *   请求头：
     *   请求体:
     *      POST 请求会把数据放在请求体
     *      1)k=v&k=v 默认格式
     *      2)JSON/xml
     *      3)多部件； 文件上传； @RequestPart
     *
     * @PathVariable： 取 URL 的动态变量；参数?之前的
     * @RequestParam:  取请求参数【k=v格式】（无论GET还是POST） 所有表单提交都是k=v格式
     * @RequestBody:  取请求体中自定义数据【非k=v格式】
     * @RequestPart： 取post文件上传的文件项
     * @RequestHeader:  @RequestHeader("Accept")
     *
     *
     * @return
     */
    @PostMapping("/fileUpload")
    public Result fileupload(@RequestPart("file")MultipartFile file){
        String filename = file.getOriginalFilename();
        long size = file.getSize();
        String contentType = file.getContentType();

        log.info("收到文件；文件名：{}，文件大小：{}，文件类型：{}",filename,size,contentType);

        //文件上传
        String filePath = fileUploadService.uploadFile(file);
        return Result.ok(filePath);
    }
}
